import express from "express";
import { exec } from "child_process"; // 用于执行命令
import { Readable } from "stream"; // 用于处理流

const app = express();
const port = 3000;

// EventStream接口
app.get('/chat/postChat', (req, res) => {
  // 设置Content-Type为event-stream
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');
  res.flushHeaders(); // 开始发送响应头

  const userMessage = "我的八字是乙亥辛巳甲辰庚午，详细分析这个八字的人生运势"; // 模拟用户消息

  // 调用ollama命令与AI模型交互
  const command = `ollama run deepseek-r1:1.5b --prompt "${userMessage}"`;

  const child = exec(command, { maxBuffer: 1024 * 500 }, (error, stdout, stderr) => {
    if (error) {
      res.write(`data: Error: ${error.message}\n\n`);
      return;
    }
    if (stderr) {
      res.write(`data: STDERR: ${stderr}\n\n`);
      return;
    }
    // 当命令执行完成后，stdout包含AI返回的内容
    res.write(`data: ${stdout}\n\n`);
    res.end(); // 结束EventStream响应
  });

  // 通过 stdout 逐字发送数据（模拟逐字显示效果）
  child.stdout.on('data', (data) => {
    const message = data.toString().trim(); // 取出命令输出的文本
    for (let i = 0; i < message.length; i++) {
      res.write(`data: ${message[i]}\n\n`);
    }
  });

  child.stdout.on('end', () => {
    res.write('data: [END]\n\n'); // 发送结束标志
    res.end(); // 结束EventStream
  });

  child.on('error', (err) => {
    console.error('Error executing command:', err);
    res.status(500).send("Error occurred while processing request.");
  });
});

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
